package main

import "fmt"

func main() {
	// go fmt.Println("hello world")
	// fmt.Println("main goroutine done")
	// time.Sleep(1 * time.Second)

	// ch := make(chan string)
	// go func() {
	//	fmt.Println("hello world")
	//	ch <- "go routine 完成"
	// }()
	//
	// fmt.Println("main goroutine done")
	// v := <-ch
	// fmt.Println("in chan v:", v)

	ch := make(chan int, 5)
	ch <- 1
	ch <- 2
	ch <- 3
	close(ch)
	// ch <- 4 // panic: send on closed channel
	v := <-ch
	v1 := <-ch
	v2 := <-ch
	v3 := <-ch
	fmt.Println(cap(ch), len(ch), v, v1, v2, v3) // 5 0 1 2 3 0

	// 单向
	ch1 := make(<-chan int) // 只读 从 chan 里取出来
	v4 := <-ch1             // 从 chan 取出来
	ch2 := make(chan<- int) // 只写 写入 chan
	ch2 <- 1                // 插入 chan
	fmt.Println(v4)

	select {
	// case t1 := <-ch1:
	// case t2 := <-ch2:
	}
}
